package com.whale.kernel.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import com.whale.kernel.model.tree.Nodal;

/**
 * 
 * Методы для работы со структурой данных типа дерева
 * 
 */
public class TreeUtils {

	/**
	 * Получить список узлов верхнего уровня. Это такие узлы у которых либо нет
	 * родительского узла либо есть родитель, но его нет в этом наборе данных
	 */
	public static <T extends Nodal<T>> List<T> getRootNodes(Map<Long, T> treeNodes) {
		List<T> roots = new ArrayList<T>();
		for (T item : treeNodes.values()) {
			if ((item.getParentId() == null)
					|| !treeNodes.containsKey(item.getParentId())) {
				roots.add(item);
			}
		}
		Collections.sort(roots);
		return roots;
	}
	
	/**
	 * 
	 * Получить дочерние узлы для указанного узла. 
	 */
	public static <T extends Nodal<T>> List<T> getChildNodes(Long nodeId, Map<Long, T> treeNodes) {
		List<T> roots = new ArrayList<T>();
		for (T item : treeNodes.values()) {
			if (nodeId.equals(item.getParentId())) {
				roots.add(item);
			}
		}
		Collections.sort(roots);
		return roots;
	}
}
